﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CCL.Utility
{
    /// <summary>
    /// 스트링 유틸리티를 제공합니다.
    /// </summary>
    public static class StringUtility
    {
        /// <summary>
        /// 문자열을 지정된 크기의 char 배열로 복사합니다.
        /// </summary>
        /// <param name="src">원본 char 배열</param>
        /// <param name="capacity">반환할 char 배열의 크기</param>
        /// <returns>지정된 크기의 char 배열</returns>
        public static char[] StringCopy(char[] src, int capacity)
        {
            char[] dest = new char[capacity];

            capacity = (capacity > src.Length) ? src.Length : capacity;
            for (int i = 0; i < capacity; i++)
            {
                dest[i] = src[i];
            }

            return dest;
        }

        /// <summary>
        /// 문자열을 지정된 크기의 char 배열로 복사합니다.
        /// </summary>
        /// <param name="src">원본 string</param>
        /// <param name="capacity">반환할 char 배열의 크기</param>
        /// <returns>지정된 크기의 char 배열</returns>
        public static char[] StringCopy(string src, int capacity)
        {
            char[] dest = new char[capacity];

            capacity = (capacity > src.Length) ? src.Length : capacity;
            for (int i = 0; i < capacity; i++)
            {
                dest[i] = src[i];
            }

            return dest;
        }

        /// <summary>
        /// char 배열을 NULL문자가 제외된 string으로 변환합니다.
        /// </summary>
        /// <param name="src">원본 char 배열</param>
        /// <returns>변환된 string</returns>
        public static string ConvertToStr(char[] src)
        {
            string str = "";

            for(int i=0; i<src.Length; i++)
            {
                if(src[i] == '\0')
                    break;

                str += src[i];
            }

            return str;
        }

        /// <summary>
        /// String을 Byte배열로 변환합니다.
        /// </summary>
        /// <param name="s">변환하고자 하는 String</param>
        /// <param name="maxSize">최대 String 길이</param>
        /// <returns>변환된 Byte 배열</returns>
        public static byte[] StringToBytes(string s, int maxSize)
        {
            int size = (s.Length < maxSize) ? s.Length : maxSize;
            byte[] temp = new byte[maxSize];
            Encoding.Default.GetBytes(s, 0, size, temp, 0);

            return temp;
        }
    }
}
